package com.cskaoyan.javase.array._2memory;

/**
 * String数组
 *
 * @since 14:21
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        // str是一个引用,"123"是一个字符串对象
        String str = "123";
        System.out.println(str + 123);
        // 调用方法来获取String字符串的长度
        System.out.println(str.length());
        String str2 = new String("123");

        // "=="比较地址,new创建新对象,这里一定是false
        System.out.println(str == str2);
        String str3 = "123";
        // str和str3指向同一个"123"字符串对象
        System.out.println(str == str3);
        // 比较内容,用equals
        System.out.println(str.equals(str2));

        // 以上String变量是局部位置定义的引用数据类型变量,是局部变量,引用在方法的栈帧中
        // 下面我们看一下在对象中存储的引用数据类型变量,引用存储在对象里
        String[] arr = {"123"};
        // arr[0]是字符串对象"123"的引用
        System.out.println(arr[0]);
        System.out.println(arr[0].length());

        String[] arr2 = new String[3];
        System.out.println(arr2[0]);

        /*
            数组长度不可变
            引用数据类型数组变量 = 引用 + 对象
            数组长度不可变,具体指的是数组对象不可变,引用可以改变
         */
        int[] arr3 = new int[3];
        arr3 = new int[4];
    }
}
